package fr.m2i.xml.test;

import java.util.ArrayList;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.xmlpull.v1.XmlPullParser;

import fr.m2i.cinescopeandroid.R;
import android.os.Bundle;
import android.app.ListActivity;
import android.view.Menu;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

/*
 * Lit des donnees XML stockees dans /res/xml/rubrique.xml
 */
public class XmlRubrique extends ListActivity {
	/*
	 * Attributs
	 */
	private TextView textViewSelection;
	private ListView listView1;
	private List<String> alIdRubrique;
	private List<String> alIntituleRubrique;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// --- Affichage de la vue xml_rubrique_simple (layout)
		setContentView(R.layout.xml_rubrique_simple);
		
		// --- Appel methode rubrique
		rubrique("CODE_RUBRIQUE");

	}

	/**
	 * 
	 * @param asChamp
	 */
	private void rubrique(String asChamp) {
		listView1 = getListView();
		
		// --- Instanciation de HashMap hm
		Map<String, String> hm = new HashMap<String, String>();

		alIdRubrique = lireRubriqueXML(R.xml.rubrique, "enr", asChamp,
				"ID_RUBRIQUE");
		alIntituleRubrique = lireRubriqueXML(R.xml.rubrique, "enr", asChamp,
				"INTITULE_RUBRIQUE");

		// --- Creation de l'ArrayList pour remplir la listView
		List<Map<String, String>> liste = new ArrayList<Map<String, String>>();

		for (int i = 0; i < alIdRubrique.size(); i++) {
			hm = new HashMap<String, String>();
			hm.put("rubrique", alIntituleRubrique.get(i));
			liste.add(hm);
		}

		SimpleAdapter sa = new SimpleAdapter(this.getBaseContext(), liste,
				R.layout.xml_rubrique, new String[] { "rubrique" },
				new int[] { R.id.rubrique });
		listView1.setAdapter(sa);
	}

	/**
	 * 
	 * @param ressource
	 * @param asBalise
	 * @param asAttribut
	 * @return
	 */
	private List<String> lireRubriqueXML(int rubrique, String asBalise,
			String asCodeRubrique, String asIntituleRubrique) {
		// --- On cree une liste
		List<String> liste = new ArrayList<String>();

		try {
			// --- On ouvre le document XML
			XmlPullParser xpp = getResources().getXml(rubrique);

			// --- Tant que le document n'a pas ete analyse jusqu'a fin
			while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {

				// --- Si c'est une balise ouvrante
				if (xpp.getEventType() == XmlPullParser.START_TAG) {
					// --- Si la balise s'appelle ...
					if (xpp.getName().equals(asBalise)
							&& xpp.getAttributeCount() > 0) {
						// --- Recuperation des valeurs des attributs
						String lsValeurCodeRubrique = xpp.getAttributeValue(
								null, asCodeRubrique);
						String lsValeurIntituleRubrique = xpp
								.getAttributeValue(null, asIntituleRubrique);

						if ((lsValeurCodeRubrique != null)
								&& (lsValeurIntituleRubrique != null)) {
							// Code qui ajoute la valeur
							liste.add(lsValeurCodeRubrique + " - "
									+ lsValeurIntituleRubrique);
						}
 
					} // / IF balise trouvee

				} // / IF start_tag

				// --- On passe a la balise suivante ou element suivant
				xpp.next();

			} // / WHILE parse

		} // / try

		catch (Throwable e) {
			textViewSelection.setText("Erreur" + e.getMessage());
		} // / catch

		return liste;
	} // / lireRessourceXML

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.xml_rubrique, menu);
		return true;
	}

}